第十一天 Process Synchronization(同步)--上
我們先來說說為什麼要同步的背景吧!
先來說個小故事,假設有張提款卡可以兩個人用,有一天他們兩個同時去存錢跟提款,這時如果資料不同步就會有很大的問題。所以兩個process可能會同時間進行,那他就有可能隨時會被中斷掉,導致共享的資料可能會前後不一,所以如果有同步的話,就可以確保資料不會出錯。像之前說過的consumer-producer也會有同步的問題,因為他們共用buffer。
以上的狀況就稱做為race condition(2個process同時執行),下面有圖能顯示得更清楚:
可以看到counter++最後算完的counter,被counter--的counter給取代了。
那多個process同時執行就會有critical section的問題存在。
每個process都有一段程式碼,要作為更改數據使用就會被放在critical section裡,當有process要進去時,其他的process就不能進去,而critical section problem就是為了設計protocol來解決。當process要進去時,要先經過entry section的同意,出來時也要經過exit section。要解決critical section problem要滿足三個條件:
Critical section在作業系統的kernel中,可以設計成:
明天我們來說說解決critical section problem的辦法!